package com.iflytek.ci.cpms.domain;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.iflytek.ci.cpms.dto.MilestoneCateCountDto;
import com.iflytek.framework.web.jackson.CustomDateTimeSerializer;

import java.io.Serializable;
import java.util.Date;

import org.hibernate.validator.constraints.NotEmpty;

/**
 * <p>
 * 项目的里程碑信息.
 * </p>
 * 
 * @author mdzhang
 * @author poplar.yfyang
 * @version 1.0 2012-12-06 13:40 PM
 * @since JDK 1.5
 */
public class Milestone implements Serializable {
	/**
	 * 序列化
	 */
	private static final long serialVersionUID = 4127566286163581621L;
	/**
	 * milestone id
	 */
	private long id;
	/**
	 * 所属项目
	 */
	private long project;
	/**
	 * name
	 */
	@NotEmpty
	private String name;
	/**
	 * description
	 */
	private String description;
	/**
	 * start time
	 */
	@JsonSerialize(using = CustomDateTimeSerializer.class)
	private Date starttime;
	/**
	 * 结束时间
	 */
	@JsonSerialize(using = CustomDateTimeSerializer.class)
	private Date duetime;
	/**
	 * 负责人姓名
	 */
	private String owner_name;
	/**
	 * 负责人的id
	 */
	private long owner;
	/**
	 * 里程碑是否完成 false：未完成 true：完成
	 */
	private boolean status;
	/**
	 * issue cate_count
	 */
	private MilestoneCateCountDto cate_count;
	/**
	 * issue 总数
	 */
	private int counts;
	/**
	 * 创建时间
	 */
	@JsonSerialize(using = CustomDateTimeSerializer.class)
	private Date createTime;
	/**
	 * 创建人的id
	 */
	private long createUser;
	/**
	 * 创建人的姓名
	 */
	private String userName;
	/** 完成描述 */
	private String finish_description;

	/**
	 * 获取项目id
	 * 
	 * @return 项目 id
	 */
	public long getProject() {
		return project;
	}

	/**
	 * 设置项目id
	 * 
	 * @param project
	 *            项目id
	 */
	public void setProject(long project) {
		this.project = project;
	}

	/**
	 * 获取里程碑名
	 * 
	 * @return 里程碑名
	 */
	public String getName() {
		return name;
	}

	/**
	 * set 里程碑名
	 * 
	 * @param name
	 *            里程碑名
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 获取里程碑命描述
	 * 
	 * @return 里程碑的详细描述
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * 设置里程碑的描述信息
	 * 
	 * @param description
	 *            里程碑的详细描述信息
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	/**
	 * 获取里程碑的目标开始时间
	 * 
	 * @return 目标开始时间
	 */
	public Date getStarttime() {
		return starttime;
	}

	/**
	 * 设置里程碑的目标开始时间
	 * 
	 * @param starttime
	 *            目标开始时间
	 */
	public void setStarttime(Date starttime) {
		this.starttime = starttime;
	}

	/**
	 * 获取里程碑的目标完成时间
	 * 
	 * @return 目标完成时间
	 */
	public Date getDuetime() {
		return duetime;
	}

	/**
	 * 设置里程碑的目标完成时间
	 * 
	 * @param duetime
	 *            目标完成时间
	 */
	public void setDuetime(Date duetime) {
		this.duetime = duetime;
	}

	/**
	 * 获取负责人姓名
	 * 
	 * @return 负责人姓名
	 */
	public String getOwner_name() {
		return owner_name;
	}

	/**
	 * 设置负责人姓名
	 * 
	 * @param owner_name
	 *            负责人姓名
	 */
	public void setOwner_name(String owner_name) {
		this.owner_name = owner_name;
	}

	/**
	 * 获取负责人的id
	 * 
	 * @return 负责人id
	 */
	public long getOwner() {
		return owner;
	}

	/**
	 * 设置负责人id
	 * 
	 * @param owner
	 *            负责人id
	 */
	public void setOwner(long owner) {
		this.owner = owner;
	}

	/**
	 * 获取里程碑的状态
	 * 
	 * @return true为完成
	 */
	public boolean getStatus() {
		return status;
	}

	/**
	 * 设置里程碑状态
	 * 
	 * @param status
	 *            true为完成，false为未完成
	 */
	public void setStatus(boolean status) {
		this.status = status;
	}

	/**
	 * 获取反馈信息的分类数，包括打开的和关闭的，MilestoneCateCountDto类型
	 * 
	 * @return 里程碑的分类信息数量
	 */
	public MilestoneCateCountDto getCate_count() {
		return cate_count;
	}

	/**
	 * 设置反馈信息的分类数，包括打开的和关闭的，MilestoneCateCountDto类型
	 * 
	 * @param cate_count
	 *            设置里程碑的返库信息分类数量
	 */
	public void setCate_count(MilestoneCateCountDto cate_count) {
		this.cate_count = cate_count;
	}

	/**
	 * 获取里程碑的反馈信息总数
	 * 
	 * @return 该里程碑的反馈信息总数
	 */
	public int getCounts() {
		return counts;
	}

	/**
	 * 设置反馈信息总数
	 * 
	 * @param counts
	 *            该里程碑的反馈信息总数
	 */
	public void setCounts(int counts) {
		this.counts = counts;
	}

	/**
	 * 获取里程碑的创建时间
	 * 
	 * @return 创建时间
	 */
	public Date getCreateTime() {
		return createTime;
	}

	/**
	 * 设置创建时间
	 * 
	 * @param createTime
	 *            创建时间
	 */
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	/**
	 * 获取创建人的id
	 * 
	 * @return 创建人id
	 */
	public long getCreateUser() {
		return createUser;
	}

	/**
	 * 设置创建人姓名
	 * 
	 * @param createUser
	 *            创建人姓名
	 */
	public void setCreateUser(long createUser) {
		this.createUser = createUser;
	}

	/**
	 * 获取其创建人姓名
	 * 
	 * @return 创建人姓名
	 */
	public String getUserName() {
		return userName;
	}

	/**
	 * 设置创建人姓名
	 * 
	 * @param userName
	 *            创建人姓名
	 * 
	 */
	public void setUserName(String userName) {
		this.userName = userName;
	}

	/**
	 * 获取里程碑的id
	 * 
	 * @return 里程碑的id
	 */
	public long getId() {
		return id;
	}

	/**
	 * 设置里程碑的id
	 * 
	 * @param id
	 *            里程碑的id
	 */
	public void setId(long id) {
		this.id = id;
	}

	/**
	 * 获取里程碑的完成描述
	 * 
	 * @return 完成描述
	 */
	public String getFinish_description() {
		return finish_description;
	}

	/**
	 * 设置里程碑的完成描述
	 * 
	 * @param finish_description
	 *            完成描述
	 */
	public void setFinish_description(String finish_description) {
		this.finish_description = finish_description;
	}
}
